Then, students use hash tables, or trees (or tries) to create their own spell checker. By importing
143,091 words from a file and checking all of Shakespeare's works, students face to problem
that comes with sloppy code: a lack in performance.
When the students transitioned to Python, they are asked to translate some of the programs
described above from C into Python.
Pset7 has a fun problem, that of Fifty Ville (a new problem in 2021), that requires students to
find a thief based on ATM transactions, license plate detectors and interview. All of those are
stores in a database, so students need to use their SQL skills to unravel the mystery.
When students learned how to create web pages with HTML, CSS, and JavaScript, they need to
create their own 'homepage', which are at least four HTML pages, styled with CSS that do
whatever the student wants.
The last problem is a very cool one. Students are asked to create a web application on which
users can buy and sell stocks, based on real-time prices.
After doing all these, and more, exercises and solving all these problems; students now must
turn to their own creativity: it's time for the Final Project. Students are allowed to create anything
with any means, as long as you program! See https://cs50.harvard.edu/x/2021/gallery/ to see
what students create.
6.1.2 Languages
In computer science education, language choice is always a tricky subject to start discussing.
Many people view it totally different, which will lead to a lot of disagreements. In 2018, we took
the CS50 course ourselves, as an introduction to programming. We can thus conclude whether
the language choice of CS50 was spot on or miserably mistaken.
CS50 starts with a graphical programming language called Scratch. By dragging and dropping
puzzle pieces one can code their own games, animations, or interactive programs in the (web
based) Scratch environment. It serves a good introduction to programming concepts, like
functions, variables, and loops. It is not, however, very representable of ‘what’s out there’, as all
programming languages use a very different type of syntax: text.
After the first week of CS50, it transitions to C: a language developed in the 1970s, which makes
it ancient. Albeit old, C is a language that is relatively small, so that CS50 can show the language
almost in its entirety, having left out some parts, as functions pointers and unions. Also, C is
very low-level, having only Assembly Language that comes closer to the hardware, which makes
it very real, without any abstractions. Lecturer Malan summarised it as “In C, there’s no magic.
If you want something to be somewhere in memory, you have to put it there yourself. If you
want a hash table, you have to implement it yourself.” (link) On the other side, C is a very arcane
language, meaning that you must know a considerable amount about hardware, before you can
use, for example, a complicated data structure. CS50 sees this a strength, because in one week,
wherein they transition from C to Python, those many lines of code to create a linked list can be
comprised into only one: myList = [].
After spending the first half of the course in C (and Scratch), it moves on to Python, a more
modern, popular language that is universally applicable. Whether you want to create a website,
encrypt a password, hack your aunt’s bank account, or create an artificial neural network that
can recognise monkeys by region, it can all be done by Python. And the beauty is, Python is
popular (in contrast to C), this means that for many things, someone else has already created
a library (a piece of code you can import and use). C is quite a verbose language, meaning that
you will need a lot of characters and boiler-plate code (code that you write in every program) to